home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-04-23 | 27.5 KB | 669 lines | [TEXT/3PRM] |
- implementation module deltaMenu;
-
- import StdClass,StdInt, StdBool, StdMisc, StdString, StdChar;
- import menuDevice;
-
- // Common access-rules:
-
- MenuHandle_MacMenuHandle :: !(MenuHandle s) -> MacMenuHandle;
- MenuHandle_MacMenuHandle (PullDownHandle h _ _ _ _) = h;
-
- MenuHandle_SetMacMenuHandle :: !(MenuHandle s) !MacMenuHandle -> MenuHandle s;
- MenuHandle_SetMacMenuHandle (PullDownHandle _ id mac_id able items) h`
- = PullDownHandle h` id mac_id able items;
-
- MenuHandle_MenuId :: !(MenuHandle s) -> MenuId;
- MenuHandle_MenuId (PullDownHandle _ id _ _ _) = id;
-
- MenuHandle_SelectState :: !(MenuHandle s) -> SelectState;
- MenuHandle_SelectState (PullDownHandle _ _ _ able _) = able;
-
- MenuHandle_SetAbility :: !SelectState !(MenuHandle s) -> MenuHandle s;
- MenuHandle_SetAbility ability (PullDownHandle h id mId _ items)
- = PullDownHandle h id mId ability items;
-
- MenuHandle_MenuItemId :: !(MenuHandle s) -> (!Bool, !MenuItemId);
- MenuHandle_MenuItemId (MenuItemHandle id _ _) = (True, id);
- MenuHandle_MenuItemId (CheckMenuItemHandle id _ _) = (True, id);
- MenuHandle_MenuItemId (SubMenuItemHandle _ id _ _) = (True, id);
- MenuHandle_MenuItemId (MenuItemGroupHandle id _) = (True, id);
- MenuHandle_MenuItemId _ = (False, 0);
-
- MenuHandle_ShortcutKey :: !(MenuHandle s) -> Char;
- MenuHandle_ShortcutKey (MenuItemHandle _ c _) = c;
- MenuHandle_ShortcutKey (CheckMenuItemHandle _ c _) = c;
- MenuHandle_ShortcutKey _ = '0';
-
-
- // Enabling and Disabling of the MenuSystem:
-
- EnableMenuSystem :: !(IOState s) -> IOState s;
- EnableMenuSystem ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = EnableMenuSystem` menus tb;
- };
-
- EnableMenuSystem` :: !(DeviceSystemState s) !Toolbox -> (!DeviceSystemState s, !Toolbox);
- EnableMenuSystem` mSystem=:(MenuSystemState (menus, cuts, handle, systemAble)) tb
- | systemAble = (mSystem,tb);
- = (MenuSystemState (menus, cuts, handle, SystemAble), EnableTheMenuSystem menus tb);
-
- EnableTheMenuSystem :: ![MenuHandle s] !Toolbox -> Toolbox;
- EnableTheMenuSystem [menu : menus] tb
- | Enabled able = SetAbilityMenu Able (MenuHandle_MacMenuHandle menu) tb1;
- = tb1;
- where {
- tb1 = EnableTheMenuSystem menus tb;
- able = MenuHandle_SelectState menu;
- };
- EnableTheMenuSystem menus tb = tb;
-
- DisableMenuSystem :: !(IOState s) -> IOState s;
- DisableMenuSystem ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = DisableMenuSystem` menus tb;
- };
-
- DisableMenuSystem` :: !(DeviceSystemState s) !Toolbox -> (!DeviceSystemState s,!Toolbox);
- DisableMenuSystem` mSystem=:(MenuSystemState (menus, cuts, handle, systemAble)) tb
- | not systemAble = (mSystem,tb);
- = (MenuSystemState (menus, cuts, handle, SystemUnable),tb1);
- where {
- tb1 = DisableTheMenuSystem menus tb;
- };
-
- DisableTheMenuSystem :: ![MenuHandle s] !Toolbox -> Toolbox;
- DisableTheMenuSystem [menu : menus] tb
- = DisableTheMenuSystem menus (SetAbilityMenu Unable (MenuHandle_MacMenuHandle menu) tb);
- DisableTheMenuSystem _ tb = tb;
-
-
- // Enabling and Disabling of Menus:
-
- EnableMenus :: ![MenuId] !(IOState s) -> IOState s;
- EnableMenus [] ioState = ioState;
- EnableMenus menuIds ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1,tb1) = SetAbilityMenus Able menuIds menus tb;
- };
-
- DisableMenus :: ![MenuId] !(IOState s) -> IOState s;
- DisableMenus [] ioState = ioState;
- DisableMenus menuIds ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1,tb1) = SetAbilityMenus Unable menuIds menus tb;
- };
-
- SetAbilityMenus :: !SelectState ![MenuId] !(DeviceSystemState s) !Toolbox
- -> (!DeviceSystemState s, !Toolbox);
- SetAbilityMenus ability menuIds (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts, handle, systemAble), tb1);
- where {
- (menus1,tb1) = SetAbilityMenus` ability systemAble menuIds menus tb;
- };
-
- SetAbilityMenus` :: !SelectState !Bool ![MenuId] ![MenuHandle s] !Toolbox
- -> (![MenuHandle s],!Toolbox);
- SetAbilityMenus` _ _ [] menus tb = (menus,tb);
- SetAbilityMenus` _ _ _ menus=:[] tb = (menus,tb);
- SetAbilityMenus` ability systemAble menuIds [menu : menus] tb
- | systemAble && contains_id
- = ([menu1 : menus1], tb2);
- | contains_id
- = ([menu1 : menus1], tb1);
- = ([menu : menus1], tb1);
- where {
- (contains_id, menuIds`) = RemoveCheckInt menuIds (MenuHandle_MenuId menu);
- (menus1,tb1) = SetAbilityMenus` ability systemAble menuIds` menus tb;
- tb2 = SetAbilityMenu ability (MenuHandle_MacMenuHandle menu) tb1;
- menu1 = MenuHandle_SetAbility ability menu;
- };
-
- SetAbilityMenu :: !SelectState !MacMenuHandle !Toolbox -> Toolbox;
- SetAbilityMenu Able menuH tb = EnableItem menuH 0 tb;
- SetAbilityMenu Unable menuH tb = DisableItem menuH 0 tb;
-
-
- /* Adding MenuItems to MenuItemGroups:
- items in a MenuItemGroup are positioned starting from 1 and increasing by 1.
- Insert/Append with a position less than 1 adds the new elements in front;
- Insert/Append with a position higher than the number of items adds the new elements to
- the end.
- Insert an item on a position adds the item BEFORE the item on that position,
- Append an item on a position adds the item AFTER the item on that position.
- Only (Check)MenuItems and MenuSeparators are added to MenuItemGroups.
- */
-
- InsertMenuItems :: !MenuItemGroupId !Int ![MenuElement s (IOState s)] !(IOState s) -> IOState s;
- InsertMenuItems _ _ [] ioState = ioState;
- InsertMenuItems groupId position newItems ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = AddMenusItems groupId (Max 0 (position-1)) newItems menus tb;
- };
-
- AppendMenuItems :: !MenuItemGroupId !Int ![MenuElement s (IOState s)] !(IOState s) -> IOState s;
- AppendMenuItems _ _ [] ioState = ioState;
- AppendMenuItems groupId position newItems ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = AddMenusItems groupId (Max 0 position) newItems menus tb;
- };
-
- AddMenusItems :: !MenuItemGroupId !Int ![MenuElement s (IOState s)] !(DeviceSystemState s) !Toolbox
- -> (!DeviceSystemState s,!Toolbox);
- AddMenusItems groupId position newItems (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts1, handle, systemAble), tb1);
- where {
- (menus1, cuts1, tb1) = AddMenusItems` groupId position newItems menus cuts tb;
- };
-
- AddMenusItems` :: !MenuItemGroupId !Int ![MenuElement s (IOState s)] ![MenuHandle s] ![Char] !Toolbox
- -> (![MenuHandle s], ![Char], !Toolbox);
- AddMenusItems` groupId position newItems [menu : menus] cuts tb
- | hasGroup = ([menu1 : menus ], cuts1, tb1);
- = ([menu : menus1], otherCuts, tb2);
- where {
- (hasGroup,menu1,cuts1,tb1) = EnlargeMenuItemGroup groupId position newItems menu cuts tb;
- (menus1, otherCuts, tb2) = AddMenusItems` groupId position newItems menus cuts tb1;
- };
- AddMenusItems` _ _ _ menus cuts tb = (menus, cuts, tb);
-
- EnlargeMenuItemGroup :: !MenuItemGroupId !Int ![MenuElement s (IOState s)]
- !(MenuHandle s) ![Char] !Toolbox
- -> (!Bool, ! MenuHandle s, ![Char], !Toolbox);
- EnlargeMenuItemGroup groupId pos newItems menuH=:(PullDownHandle h id mac_id able items) cuts tb
- | hasGroup = (True, PullDownHandle h id mac_id able items1, cuts1, tb1);
- = (False, menuH, cuts, tb1);
- where {
- (hasGroup,items1,cuts1,tb1) = EnlargeMenuItemGroup` groupId pos newItems h items cuts tb 1;
- };
-
- EnlargeMenuItemGroup` :: !MenuItemGroupId !Int ![MenuElement s (IOState s)] !MacMenuHandle
- ![MenuHandle s] ![Char] !Toolbox !Int
- -> (!Bool, ![MenuHandle s],![Char],!Toolbox);
- EnlargeMenuItemGroup` id pos newItems h [gH=:MenuItemGroupHandle gId gItems : hs] cuts tb nr
- | id == gId = (True, [MenuItemGroupHandle gId gItems1 : hs], cuts1, tb1);
- = (b, [gH : hs1], cuts2, tb2);
- where {
- (gItems1,cuts1,tb1) = EnlargeItemGroup pos newItems h gItems cuts tb nr;
- (b, hs1, cuts2,tb2) = EnlargeMenuItemGroup` id pos newItems h hs cuts tb nr1;
- nr1 = nr + Length_new gItems;
- };
- EnlargeMenuItemGroup` id pos newItems h [subH=:SubMenuItemHandle sH sId mId items : hs] cuts tb nr
- | hasGroup = (True, [SubMenuItemHandle sH sId mId items1 : hs], cuts1, tb1);
- = (b, [subH : hs1], cuts2, tb2);
- where {
- (hasGroup,items1,cuts1,tb1) = EnlargeMenuItemGroup` id pos newItems sH items cuts tb 1;
- (b, hs1, cuts2, tb2) = EnlargeMenuItemGroup` id pos newItems h hs cuts tb1 (nr+1);
- };
- EnlargeMenuItemGroup` id pos newItems h [handle : handles] cuts tb nr
- = (b, [handle : handles`], cuts`, tb`);
- where {
- (b,handles`,cuts`,tb`) = EnlargeMenuItemGroup` id pos newItems h handles cuts tb (nr+1);
- };
- EnlargeMenuItemGroup` _ _ _ _ handles cuts tb _ = (False, handles, cuts, tb);
-
- EnlargeItemGroup :: !Int ![MenuElement s (IOState s)] !MacMenuHandle
- ![MenuHandle s] ![Char] !Toolbox !Int
- -> (![MenuHandle s],![Char],!Toolbox);
- EnlargeItemGroup 0 newItems h items cuts tb nr
- = EnlargeItemGroup` newItems h items cuts tb (nr-1);
- EnlargeItemGroup position newItems h [item : items] cuts tb nr
- = ([item : items`], cuts`, tb`);
- where {
- (items`, cuts`, tb`) = EnlargeItemGroup (position-1) newItems h items cuts tb (nr+1);
- };
- EnlargeItemGroup position newItems h items cuts tb nr
- = EnlargeItemGroup` newItems h items cuts tb (nr-1);
-
- EnlargeItemGroup` :: ![MenuElement s (IOState s)] !MacMenuHandle
- ![MenuHandle s] ![Char] !Toolbox !Int
- -> (![MenuHandle s],![Char],!Toolbox);
- EnlargeItemGroup` [newItem : newItems] h items cuts tb nr
- | MenuElementIsGroupItem newItem = ([itemH : items1], cuts2, tb4);
- = ( items1, cuts1, tb1);
- where {
- (items1,cuts1,tb1) = EnlargeItemGroup` newItems h items cuts tb nr;
- (newItem1,cuts2) = CheckShortcutKey newItem cuts1;
- (itemH, tb2) = NewMenuElementHandle newItem1 0 tb1;
- (title,macstr) = MenuElementToMacElement newItem1;
- tb3 = InsMenuItem h macstr nr tb2;
- tb4 = SetItem h (nr+1) title tb3;
- };
- EnlargeItemGroup` _ _ items cuts tb _ = (items, cuts, tb);
-
- MenuElementIsGroupItem :: !(MenuElement s (IOState s)) -> Bool;
- MenuElementIsGroupItem (MenuItem _ _ _ _ _) = True;
- MenuElementIsGroupItem (CheckMenuItem _ _ _ _ _ _) = True;
- MenuElementIsGroupItem MenuSeparator = True;
- MenuElementIsGroupItem _ = False;
-
-
- // Removing MenuItems from MenuItemGroups:
-
- RemoveMenuItems :: ![MenuItemId] !(IOState s) -> IOState s;
- RemoveMenuItems [] ioState = ioState;
- RemoveMenuItems itemIds ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = RemoveMenusItems itemIds menus tb;
- };
-
- RemoveMenusItems :: ![MenuItemId] !(DeviceSystemState s) !Toolbox -> (!DeviceSystemState s,!Toolbox);
- RemoveMenusItems itemIds (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts1, handle, systemAble), tb1);
- where {
- (menus1, cuts1, tb1) = RemoveMenusItems` itemIds menus cuts tb;
- };
-
- RemoveMenusItems` :: ![MenuItemId] ![MenuHandle s] ![Char] !Toolbox
- -> (![MenuHandle s], ![Char], !Toolbox);
- RemoveMenusItems` _ menus=:[] cuts tb = (menus, cuts, tb);
- RemoveMenusItems` [] menus cuts tb = (menus, cuts, tb);
- RemoveMenusItems` itemIds [menu : menus] cuts tb
- = ([menu1 : menus1], cuts2, tb2);
- where {
- (itemIds1, menu1, cuts1, tb1) = RemoveMenuItems` itemIds menu cuts tb;
- (menus1, cuts2, tb2) = RemoveMenusItems` itemIds1 menus cuts1 tb1;
- };
-
- RemoveMenuItems` :: ![MenuItemId] !(MenuHandle s) ![Char] !Toolbox
- -> (![MenuItemId],! MenuHandle s, ![Char],!Toolbox);
- RemoveMenuItems` itemIds (PullDownHandle h id mac_id able items) cuts tb
- = (itemIds1, PullDownHandle h id mac_id able items1, cuts1, tb1);
- where {
- (itemIds1, items1, cuts1, tb1) = RemoveFromGroupItems itemIds h items cuts tb 1;
- };
-
- RemoveFromGroupItems :: ![MenuItemId] !MacMenuHandle ![MenuHandle s] ![Char] !Toolbox !Int
- -> (![MenuItemId],![MenuHandle s],![Char],!Toolbox);
- RemoveFromGroupItems itemIds h done=:[] cuts tb nr = (itemIds, done, cuts, tb);
- RemoveFromGroupItems done=:[] h items cuts tb nr = (done, items, cuts, tb);
- RemoveFromGroupItems itemIds h [MenuItemGroupHandle id items : hs] cuts tb nr
- = (itemIds2, [MenuItemGroupHandle id items1 : hs1], cuts2, tb2);
- where {
- (itemIds1, items1, cuts1, tb1) = RemoveGroupItems itemIds h items cuts tb nr;
- (itemIds2, hs1, cuts2, tb2) = RemoveFromGroupItems itemIds1 h hs cuts1 tb1 nr1;
- nr1 = nr+Length_new items1;
- };
- RemoveFromGroupItems itemIds h [SubMenuItemHandle subH id mac_id items : hs] cuts tb nr
- = (itemIds2, [SubMenuItemHandle subH id mac_id items1 : hs1], cuts2, tb2);
- where {
- (itemIds1, items1, cuts1, tb1) = RemoveFromGroupItems itemIds subH items cuts tb 1;
- (itemIds2, hs1, cuts2, tb2) = RemoveFromGroupItems itemIds1 h hs cuts1 tb1 (nr+1);
- };
- RemoveFromGroupItems itemIds h [noItemGroup : hs] cuts tb nr
- = (itemIds1, [noItemGroup : hs1], cuts1, tb1);
- where {
- (itemIds1, hs1, cuts1, tb1) = RemoveFromGroupItems itemIds h hs cuts tb (nr+1);
- };
-
- RemoveGroupItems :: ![MenuItemId] !MacMenuHandle ![MenuHandle s] ![Char] !Toolbox !Int
- -> (![MenuItemId],![MenuHandle s],![Char],!Toolbox);
- RemoveGroupItems itemIds h done=:[] cuts tb nr = (itemIds, done, cuts, tb);
- RemoveGroupItems done=:[] h items cuts tb nr = (done, items, cuts, tb);
- RemoveGroupItems itemIds h [itemH : hs] cuts tb nr
- | isAnIdItem && containsItem = (itemIds2, hs1, cuts1, DelMenuItem h nr tb1);
- = (itemIds2, [itemH : hs1], cuts2, tb1);
- where {
- (isAnIdItem, id) = MenuHandle_MenuItemId itemH;
- (itemIds1, hs1, cuts2, tb1) = RemoveGroupItems itemIds h hs cuts tb (nr+1);
- (containsItem, itemIds2) = RemoveCheckInt itemIds1 id;
- cuts1 = DeleteKey cuts (MenuHandle_ShortcutKey itemH);
- };
-
- DeleteKey :: ![Char] !Char -> [Char];
- DeleteKey [c : cs] c`
- | c == c` = cs;
- = [c : DeleteKey cs c`];
- DeleteKey cs c` = cs;
-
-
- // Removing MenuItems from MenuItemGroups by index (counting from 1):
-
- RemoveMenuGroupItems :: !MenuItemGroupId ![Int] !(IOState s) -> IOState s;
- RemoveMenuGroupItems _ [] ioState = ioState;
- RemoveMenuGroupItems gId itemInds ioState
- = IOStateSetDevice (IOStateSetToolbox (DrawMenuBar tb1) ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = RemoveMenusGroupItems gId itemInds menus tb;
- };
-
- RemoveMenusGroupItems :: !MenuItemGroupId ![Int] !(DeviceSystemState s) !Toolbox
- -> (!DeviceSystemState s, !Toolbox);
- RemoveMenusGroupItems gId itemInds (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts1, handle, systemAble), tb1);
- where {
- (menus1, cuts1, tb1) = RemoveMenusGroupItems` gId itemInds menus cuts tb;
- };
-
- RemoveMenusGroupItems` :: !MenuItemGroupId ![Int]
- ![MenuHandle s] ![Char] !Toolbox
- -> (![MenuHandle s],![Char],!Toolbox);
- RemoveMenusGroupItems` gId itemInds [menu : menus] cuts tb
- | removed = ([menu1 : menus ], cuts1, tb1);
- = ([menu : menus1], cuts2, tb2);
- where {
- (removed,menu1,cuts1,tb1) = RemoveMenuGroupItems` gId itemInds menu cuts tb;
- (menus1, cuts2, tb2) = RemoveMenusGroupItems` gId itemInds menus cuts tb1;
- };
- RemoveMenusGroupItems` _ _ menus cuts tb = (menus, cuts, tb);
-
- RemoveMenuGroupItems` :: !MenuItemGroupId ![Int] !(MenuHandle s) ![Char] !Toolbox
- -> (!Bool, !MenuHandle s, ![Char], !Toolbox);
- RemoveMenuGroupItems` gId itemInds menu=:(PullDownHandle h id mac_id able items) cuts tb
- | removed = (True, PullDownHandle h id mac_id able items`, cuts`, tb`);
- = (False, menu, cuts, tb`);
- where {
- (removed,items`,cuts`,tb`) = RemoveFromMenuGroupItems gId itemInds h items cuts tb 1;
- };
-
- RemoveFromMenuGroupItems :: !MenuItemGroupId ![Int] !MacMenuHandle
- ![MenuHandle s] ![Char] !Toolbox !Int
- -> (!Bool, ![MenuHandle s],![Char],!Toolbox);
- RemoveFromMenuGroupItems gId itemInds h [item=:MenuItemGroupHandle id items : hs] cuts tb nr
- | gId == id = (True, [MenuItemGroupHandle id items1 : hs], cuts1, tb1);
- = (removed, [item : hs1], cuts2, tb2);
- where {
- (_, items1, cuts1, tb1) = RemoveGroupItems itemIds h items cuts tb nr;
- (removed, hs1, cuts2, tb2) = RemoveFromMenuGroupItems gId itemInds h hs cuts tb1 nr1;
- itemIds = ItemIndicesToItemIds 1 itemInds items;
- nr1 = nr+Length_new items;
- };
- RemoveFromMenuGroupItems gId itemInds h [item=:SubMenuItemHandle subH id mId items : hs] cuts tb nr
- | subRemoved = (True, [SubMenuItemHandle subH id mId items1 : hs], cuts1, tb1);
- = (removed, [item : hs1], cuts2, tb2);
- where {
- (subRemoved,items1,cuts1,tb1) = RemoveFromMenuGroupItems gId itemInds subH items cuts tb 1;
- (removed, hs1, cuts2, tb2) = RemoveFromMenuGroupItems gId itemInds h hs cuts tb1 (inc nr);
- };
- RemoveFromMenuGroupItems gId itemInds h [noItemGroup : hs] cuts tb nr
- = (removed, [noItemGroup : hs1], cuts1, tb1);
- where {
- (removed, hs1, cuts1, tb1) = RemoveFromMenuGroupItems gId itemInds h hs cuts tb (nr+1);
- };
- RemoveFromMenuGroupItems _ _ _ done cuts tb _ = (False, done, cuts, tb);
-
- ItemIndicesToItemIds :: !Int ![Int] ![MenuHandle s] -> [MenuItemId];
- ItemIndicesToItemIds index indices [item : items]
- | contains = [id : ids];
- = ids;
- where {
- (contains, indices`)= RemoveCheckInt indices index;
- (_,id) = MenuHandle_MenuItemId item;
- ids = ItemIndicesToItemIds (index+1) indices` items;
- };
- ItemIndicesToItemIds _ _ _ = [];
-
-
- /* SelectMenuRadioItem marks the RadioItem and unmarks the currently marked
- RadioItem of the MenuRadioItems it belongs to.
- */
-
- SelectMenuRadioItem :: !MenuItemId !(IOState s) -> IOState s;
- SelectMenuRadioItem itemId ioState
- = IOStateSetDevice (IOStateSetToolbox tb1 ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = MenusSelectRadioItem itemId menus tb;
- };
-
- MenusSelectRadioItem :: !MenuItemId !(DeviceSystemState s) !Toolbox
- -> (!DeviceSystemState s, !Toolbox);
- MenusSelectRadioItem itemId (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts, handle, systemAble), tb1);
- where {
- (menus1,tb1) = MenusSelectRadioItem` itemId menus tb;
- };
-
- MenusSelectRadioItem` :: !MenuItemId ![MenuHandle s] !Toolbox -> (![MenuHandle s], !Toolbox);
- MenusSelectRadioItem` itemId [menu=:PullDownHandle h id mac_id able items : menus] tb
- | selected = ([PullDownHandle h id mac_id able items1 : menus], tb1);
- = ([menu : menus1], tb2);
- where {
- (selected, items1, tb1) = MenuSelectRadioItem h itemId items tb 1;
- (menus1, tb2) = MenusSelectRadioItem` itemId menus tb1;
- };
- MenusSelectRadioItem` _ menus tb = (menus, tb);
-
- MenuSelectRadioItem :: !MacMenuHandle !MenuItemId ![MenuHandle s] !Toolbox !Int
- -> (!Bool, ![MenuHandle s], !Toolbox);
- MenuSelectRadioItem h itemId [item=:MenuRadioItemsHandle radioItems : items] tb nr
- | ContainsInt allIds itemId = (True, [item : items ], tb1);
- = (changed, [item : items1], tb2);
- where {
- tb1 = MenuRadioItemsSelectRadioItem h itemId radioItems tb nr;
- allIds = MenuElementHandlesToIds radioItems;
- (changed, items1, tb2) = MenuSelectRadioItem h itemId items tb (nr+Length_new radioItems);
- };
- MenuSelectRadioItem h itemId [item=:SubMenuItemHandle subH id mId subItems : items] tb nr
- | selected = (True, [SubMenuItemHandle subH id mId subItems1 : items], tb1);
- = (changed, [item : items1], tb2);
- where {
- (selected, subItems1, tb1) = MenuSelectRadioItem subH itemId subItems tb 1;
- (changed, items1, tb2) = MenuSelectRadioItem h itemId items tb1 (nr+1);
- };
- MenuSelectRadioItem h itemId [item : items] tb nr
- = (changed, [item : items1], tb1);
- where {
- (changed, items1, tb1) = MenuSelectRadioItem h itemId items tb (nr+1);
- };
- MenuSelectRadioItem _ _ items tb _ = (False, items, tb);
-
- MenuRadioItemsSelectRadioItem :: !MacMenuHandle !MenuItemId ![MenuHandle s] !Toolbox !Int
- -> Toolbox;
- MenuRadioItemsSelectRadioItem h itemId [item=:CheckMenuItemHandle id _ _ : items] tb nr
- = MenuRadioItemsSelectRadioItem h itemId items tb1 (nr+1);
- where {
- tb1 = CheckItem h nr (itemId == id) tb;
- };
- MenuRadioItemsSelectRadioItem _ _ _ tb _ = tb;
-
- MenuElementHandlesToIds :: ![MenuHandle s] -> [MenuItemId];
- MenuElementHandlesToIds [CheckMenuItemHandle id _ _ : hs] = [id : MenuElementHandlesToIds hs];
- MenuElementHandlesToIds [_ : hs] = MenuElementHandlesToIds hs;
- MenuElementHandlesToIds _ = [];
-
-
- // Changing the attributes of MenuItems:
-
- :: DeltaItemHandle *s :== (MenuHandle s) -> MacMenuHandle
- -> Int
- -> Toolbox
- -> (MenuHandle s, !Toolbox);
- :: ItemChange *s :== (!MenuItemId, !DeltaItemHandle s);
-
-
- // Enabling and Disabling of MenuItems:
-
- EnableMenuItems :: ![MenuItemId] !(IOState s) -> IOState s;
- EnableMenuItems itemIds ioState = ChangeMenuItems (Map (SelectionChange Able) itemIds) ioState;
-
- DisableMenuItems :: ![MenuItemId] !(IOState s) -> IOState s;
- DisableMenuItems itemIds ioState = ChangeMenuItems (Map (SelectionChange Unable) itemIds) ioState;
-
- SelectionChange :: SelectState !MenuItemId -> ItemChange s;
- SelectionChange ability id = (id, SetItemAbility ability);
-
- SetItemAbility :: !SelectState !(MenuHandle s) !MacMenuHandle !Int !Toolbox
- -> (!MenuHandle s,!Toolbox);
- SetItemAbility ability item=:(SubMenuItemHandle subH _ _ _) _ _ tb
- | Enabled ability = (item, EnableItem subH 0 tb);
- = (item, DisableItem subH 0 tb);
- SetItemAbility ability item h nr tb
- | Enabled ability = (item, EnableItem h nr tb);
- = (item, DisableItem h nr tb);
-
-
- // Marking and UnMarking of MenuItems:
-
- MarkMenuItems :: ![MenuItemId] !(IOState s) -> IOState s;
- MarkMenuItems itemIds ioState = ChangeMenuItems (Map (MarkChange Mark) itemIds) ioState;
-
- UnmarkMenuItems :: ![MenuItemId] !(IOState s) -> IOState s;
- UnmarkMenuItems itemIds ioState = ChangeMenuItems (Map (MarkChange NoMark) itemIds) ioState;
-
- MarkChange :: !MarkState !MenuItemId -> ItemChange s;
- MarkChange mark id = (id, SetItemMark mark);
-
- SetItemMark :: !MarkState !(MenuHandle s) !MacMenuHandle !Int !Toolbox -> (!MenuHandle s, !Toolbox);
- SetItemMark mark item=:(CheckMenuItemHandle id c f) h nr tb
- = (item, CheckItem h nr (Checked mark) tb);
- SetItemMark _ item _ _ tb = (item, tb);
-
-
- // Changing the ItemTitle of MenuItems:
-
- ChangeMenuItemTitles :: ![(MenuItemId, ItemTitle)] !(IOState s) -> IOState s;
- ChangeMenuItemTitles ids_titles ioState = ChangeMenuItems (Map TitleChange ids_titles) ioState;
-
- TitleChange :: !(MenuItemId, ItemTitle) -> ItemChange s;
- TitleChange (id, title) = (id, SetItemTitle title);
-
- SetItemTitle :: !ItemTitle !(MenuHandle s) !MacMenuHandle !Int !Toolbox -> (!MenuHandle s, !Toolbox);
- SetItemTitle title item h nr tb = (item, SetItem h nr title tb);
-
-
- // Changing the MenuFunction of MenuItems:
-
- ChangeMenuItemFunctions :: ![(MenuItemId, MenuFunction s (IOState s))] !(IOState s) -> IOState s;
- ChangeMenuItemFunctions ids_fs ioState = ChangeMenuItems (Map FunctionChange ids_fs) ioState;
-
- FunctionChange :: !(MenuItemId, MenuFunction s (IOState s)) -> ItemChange s;
- FunctionChange (id, f) = (id, SetItemFunction f);
-
- SetItemFunction :: !(MenuFunction s (IOState s)) !(MenuHandle s) !MacMenuHandle !Int !Toolbox
- -> (!MenuHandle s, !Toolbox);
- SetItemFunction f` (MenuItemHandle id c _) h nr tb = (MenuItemHandle id c f`, tb);
- SetItemFunction f` (CheckMenuItemHandle id c _) h nr tb = (CheckMenuItemHandle id c f`, tb);
- SetItemFunction _ item _ _ tb = (item, tb);
-
-
- // Now do it!
-
- ChangeMenuItems :: ![ItemChange s] !(IOState s) -> IOState s;
- ChangeMenuItems [] ioState = ioState;
- ChangeMenuItems changes ioState
- = IOStateSetDevice (IOStateSetToolbox tb1 ioState2) menus1;
- where {
- (menus, ioState1) = IOStateGetDevice ioState MenuDevice;
- (tb, ioState2) = IOStateGetToolbox ioState1;
- (menus1, tb1) = SetMenusItems changes menus tb;
- };
-
- SetMenusItems :: ![ItemChange s] !(DeviceSystemState s) !Toolbox -> (!DeviceSystemState s, !Toolbox);
- SetMenusItems changes (MenuSystemState (menus, cuts, handle, systemAble)) tb
- = (MenuSystemState (menus1, cuts, handle, systemAble), tb1);
- where {
- (menus1,tb1) = SetMenusItems` changes menus tb;
- };
-
- SetMenusItems` :: ![ItemChange s] ![MenuHandle s] !Toolbox -> (![MenuHandle s], !Toolbox);
- SetMenusItems` changes [PullDownHandle h id mId able items : menus] tb
- = ([PullDownHandle h id mId able items1 : menus1], tb2);
- where {
- (items1, tb1) = SetMenuItems changes items h tb 1;
- (menus1, tb2) = SetMenusItems` changes menus tb1;
- };
- SetMenusItems` _ menus tb = (menus, tb);
-
- SetMenuItems :: ![ItemChange s] ![MenuHandle s] !MacMenuHandle !Toolbox !Int
- -> (![MenuHandle s], !Toolbox);
- SetMenuItems [] items h tb nr = (items, tb);
- SetMenuItems changes [item=:MenuItemHandle id c f : items] h tb nr
- | anItem
- = ([item1 : items1], tb2);
- with {
- (item1, tb2) = change item h nr tb1;
- }
- = ([item : items1], tb1);
- where {
- (anItem, change, changes`) = ItemChanges changes id;
- (items1,tb1) = SetMenuItems changes` items h tb (inc nr);
- };
- SetMenuItems changes [item=:CheckMenuItemHandle id c f : items] h tb nr
- | anItem = ([item1 : items1], tb2);
- = ([item : items1], tb1);
- where {
- (anItem, change, changes`) = ItemChanges changes id;
- (item1, tb2) = change item h nr tb1;
- (items1,tb1) = SetMenuItems changes` items h tb (nr+1);
- };
- SetMenuItems changes [MenuItemGroupHandle id gItems : items] h tb nr
- = ([MenuItemGroupHandle id gItems1 : items1], tb2);
- where {
- (gItems1,tb1) = SetMenuItems changes gItems h tb nr;
- (items1, tb2) = SetMenuItems changes items h tb1 nr1;
- nr1 = nr+Length_new gItems;
- };
- SetMenuItems changes [item=:SubMenuItemHandle subH id mId subItems : items] h tb nr
- | anItem = ([item2 : items1], tb3);
- = ([item1 : items1], tb3);
- where {
- (anItem, change, changes`) = ItemChanges changes id;
- (subItems1, tb1) = SetMenuItems changes subItems subH tb 1;
- item1 = SubMenuItemHandle subH id mId subItems1;
- (item2, tb2) = change item1 h nr tb1;
- (items1,tb3) = SetMenuItems changes items h tb2 (nr+1);
- };
- SetMenuItems changes [MenuRadioItemsHandle radioItems : items] h tb nr
- = ([MenuRadioItemsHandle radioItems1 : items1], tb2);
- where {
- (radioItems1, tb1) = SetMenuRadioItems changes radioItems h tb nr;
- (items1, tb2) = SetMenuItems changes items h tb1 nr1;
- nr1 = nr+Length_new radioItems;
- };
- SetMenuItems changes [item : items] h tb nr
- = ([item : items1], tb1);
- where {
- (items1, tb1) = SetMenuItems changes items h tb (nr+1);
- };
- SetMenuItems _ items _ tb _ = (items, tb);
-
- SetMenuRadioItems :: ![ItemChange s] ![MenuHandle s] !MacMenuHandle !Toolbox !Int
- -> (![MenuHandle s], !Toolbox);
- SetMenuRadioItems [] checks _ tb _ = (checks, tb);
- SetMenuRadioItems changes [check=:CheckMenuItemHandle id c f : checks] h tb nr
- | anItem = ([check1 : checks1], tb2);
- = ([check : checks1], tb1);
- where {
- (anItem, change, changes`) = ItemChanges changes id;
- (check1, tb2) = change check h nr tb1;
- (checks1,tb1) = SetMenuRadioItems changes` checks h tb (nr+1);
- };
- SetMenuRadioItems _ checks _ tb _ = (checks, tb);
-
- ItemChanges :: ![ItemChange s] !MenuItemId -> (!Bool, !DeltaItemHandle s, ![ItemChange s]);
- ItemChanges [change=:(itemId, dItem) : changes] id
- | itemId == id = (True, dItem, changes);
- = (b, change`, [change : changes`]);
- where {
- (b, change`, changes`) = ItemChanges changes id;
- };
- ItemChanges changes _ = (False, NoChange, changes);
-
- NoChange :: (MenuHandle s) MacMenuHandle Int Toolbox -> (MenuHandle s, Toolbox);
- NoChange h _ _ tb = (h, tb);
-